package util;

import java.util.ArrayList;
import java.util.Iterator;

public  class Duzeltmeler {
	Duzeltmeler(KelimeTr klm) {
	}

	public static void Yumusama_Adim_1B1 (Token aToken,SozlukTr kokSozluk, SozlukTr TDKimlaKlavuzu){

		String aStr=new String();
		int endIndx=0;

		// Tüm kelimeyi tarayıp yumuşamaları alır, kök sözlüğü kontrolü yapar
		int tokenSize=0;
		HarfTr currentHrf=new HarfTr();
		HarfTr nextHrf=new HarfTr ();
		tokenSize=aToken.getLength();

		if(aToken.isYumusama()){
			for (int i=0;i<tokenSize-1;i++){
				endIndx=i;
				currentHrf=aToken.getHarfTrByIndx(i);
				nextHrf=aToken.getHarfTrByIndx(i+1);
				HarfTr aHarf=new HarfTr();

				if(currentHrf.isYumusakSureksizSessiz()&& nextHrf.isSesli() ){
					aStr=aToken.getContent().substring(0, endIndx);
					/*
					 * Yumuşama olan harf Token da değiştirilir. 
					 */				
					char ch;
					ch=aToken.getContent().charAt(endIndx);
					if (ch=='b'){
						aHarf.setContent("p");
						aToken.setOncekiHali(aToken.getContent());
						aToken.setContentHrfByIndex(endIndx, aHarf);
					}else if (ch=='c'){
						aHarf.setContent("ç");
						aToken.setOncekiHali(aToken.getContent());
						aToken.setContentHrfByIndex(endIndx, aHarf);
					}else if (ch=='d'){
						aHarf.setContent("t");
						aToken.setOncekiHali(aToken.getContent());
						aToken.setContentHrfByIndex(endIndx, aHarf);
					}else if (ch=='g'){
						aHarf.setContent("k");
						aToken.setOncekiHali(aToken.getContent());
						aToken.setContentHrfByIndex(endIndx, aHarf);
					}else if (ch=='ğ'){
						aHarf.setContent("k");
						aToken.setOncekiHali(aToken.getContent());
						aToken.setContentHrfByIndex(endIndx+1, aHarf);
					}
					// Token ın Kök sözlük  kontrolü
					if(kokSozluk.KokSozlukteVarMi(aStr)){
						System.out.println("INFO: Kök sözlükte ("+aStr+") bulundu");

						// Yumusama yapıp yapmadığı kontrol edilir.
						if(TDKimlaKlavuzu.getKelime(aStr)!=null){
							//TDK Klavuzunda yumuşama hali kontrol edilir.
							if(!(TDKimlaKlavuzu.getKelime(aStr).isYumusamaYapar())){
								System.out.println("INFO: Aranan kelime ("+aStr+") TDK imla klavuzunda yumuşama yapmaz olarak kodlu");

								//Kök sözlükte bulunsa da ve TDK klavuzda "yumuşama yapmaz" kodlu ise 
								//Token daki değişiklik geri alınır
								aToken.setContent(aToken.getOncekiHali());	
							}
						}
					}else{
						System.out.println("INFO: Kök sözlükte ("+aStr+")yok");

						//Kök sözlükte bulunamazsa Token daki değişiklik geri alınır
						if(aToken.getOncekiHali()!=null){
							aToken.setContent(aToken.getOncekiHali());					
						}
					}
				}//end if
			}//end for
		}	
	}//end function
	public static void  Kaynasma_Adim_1B3 (){

	}
	/**
	 * <pre>Verilen kelimede düşme olayını tersine çevirir.
	 * </pre>
	 * 
	 * @param aToken : İşlem yapılacak kelime
	 * @param kokSozluk : Köklerin kontrol edile
	 * @param TDKimlaKlavuzu : Yumusama kontrolünde kullanılır.
	 * @author mbilgen
	 * */
	public static void Dusme_Adim_1B2 (Token aToken,SozlukTr kokSozluk, SozlukTr TDKimlaKlavuzu) {


		for (int n=0;n<aToken.getLength()-2;n++){
			HarfTr currentHrf=new HarfTr()  ; currentHrf=aToken.getHarfTrByIndx(n); // n'inci harf
			HarfTr nextHrf=new HarfTr()     ; nextHrf=aToken.getHarfTrByIndx(n+1);  // n+1'inci harf
			HarfTr nextNextHrf=new HarfTr() ; nextNextHrf=aToken.getHarfTrByIndx(n+2); // n+2'nci harf

			HarfTr aHarf=new HarfTr();

			//			char ch;// gerek yok
			//			ch=aToken.getContent().charAt(endIndx); //gerek yok

			if(currentHrf.isSessiz()&& nextHrf.isSessiz()&&nextNextHrf.isSesli() ){

				if(nextNextHrf.isDarSesli() ){ 
					/** i.1.a.:  n+2'nci indeksteki harf u-ü-ı-i (dar sesli) ise n+1. indekse n+2. İndeksteki sesli harfin aynısını ekle
					 *     			i.: eklenen harfle oluşan kökleri (kelimenin başından n+3  (n+3 dahil değil) e 
					 *        		    kadar olan kök sözlüğünde kontrol et, eşleşen köke göre kelimeyi kesinleştir
					 */    

					String str=new String();
					/**
					 * i.  eklenen harfle oluşan kökleri kelimenin başından n+3  
					 *     (n+3 dahil değil)e kadar olan kök sözlüğünde kontrol et,
					 * */					
					aToken.setOncekiHali(aToken.getContent());
					aToken.shiftInsert(n+1, nextNextHrf);
					str=aToken.subStringBeforeIndex(n+3);
					if(kokSozluk.KokSozlukteVarMi(str)){
						System.out.println("INFO: Kök sözlükte ("+str+") bulundu");
					}     
					System.out.print("INFO: Aranan kelime: "+str + " ");

				}else if(nextNextHrf.getContent().equalsIgnoreCase("a") || nextNextHrf.getContent().equalsIgnoreCase("e")){					
					/**
					 * i.1.b.:  n+2'nci indeksteki harf a-e ise n+1. indekse dar sesli (ı-i-u-ü) ekle
					 * 	        i.:  eklenen harfle oluşan kökleri (kelimenin başından n+3  (n+3 dahil değil) e 
					 *               kadar olan kök sözlüğünde kontrol et, eşleşen köke göre kelimeyi kesinleştir
					 * */				
					ArrayList<String> darHrfArrList = new ArrayList<String>();
					darHrfArrList= HarfTr.getDarSesliHarfler();

					Iterator<String> itr = darHrfArrList.iterator();
					while(itr.hasNext()) {
						String str=new String();

						aHarf.setContent(itr.next());

						//aToken.setOncekiHali(aToken.getContent()); //gerek yok shift fonksiyon içinde yapılıyor.
						// n+1'inci indekse dar Sesli harf eklenir
						if (aToken.getOncekiHali()!=null){
							aToken.setContent(aToken.getOncekiHali());
						}
						aToken.shiftInsert(n, aHarf);
						str=aToken.subStringBeforeIndex(n+3);

						/*
						 * i.  eklenen harfle oluşan kökleri kelimenin başından n+3  
						 *     (n+3 dahil değil)e kadar olan kök sözlüğünde kontrol et,
						 * */ 
						if(kokSozluk.KokSozlukteVarMi(str)){
							System.out.println("INFO: Kök sözlükte ("+str+") bulundu");
						}     
						System.out.print("INFO: Aranan kelime: "+str + " ");
					}//end  while
				}

			}//end if

		};//end for

	}
}//end class
